package com.zbkj.client.service;

import com.alibaba.fastjson.JSONObject;
import com.zbkj.common.model.client.workbench.VideoTemplateFinal;
import com.zbkj.common.request.client.ReplacePicRequest;
import com.zbkj.common.request.client.VideoTemplateRequest;
import com.zbkj.common.vo.client.CreateFolderVo;
import net.sf.jsqlparser.statement.replace.Replace;

import java.util.List;
import java.util.Map;

public interface VideoServiceCommon {
    /**
     * 获取抖音视频真实信息
     * @param url 视频链接
     * @return 视频真实信息，失败时抛出异常或返回null
     */
    Map<String, Object> getVideoRealInfo(String url);

    /**
     * 调用视频拆解API
     * @param videoUrl 视频链接
     * @return 返回API响应体
     */
    Map<String, Object> videoSplitApi(String videoUrl);


    /**
     * 调用视频转字幕API
     * @param videoUrl 视频链接
     * @return 返回API响应体
     */
    public Map<String, Object> videoSubtitleApi(String videoUrl);

    /**
     * 调用agent获取视频字幕和素材列表
     * @param content 内容
     * @return agent返回的message字符串
     */
    Map<String , Object> videoSubtitleAgentApi(String content);

    /**
     * 调用agent搜索图片
     * @param picsKeywords 图片关键词数组
     * @return 图片url列表
     */
    List<Map<String, String>> videoPicAgentApi(List<Map<String, Object>> picsKeywords);

    /**
     * 秘塔图片搜索
     * @param picsKeywords
     * @return
     */
    List<Map<String, String>> videoPicMetaApi(List<Map<String, Object>> picsKeywords);

    /**
     * 搜索图片
     * @param picsKeywords
     * @return
     */
    List<Map<String, String>> picSearchApi(List<Map<String, Object>> picsKeywords);

    /**
     * 调用agent模板成片接口
     * @param id 视频的Id
     * @param dpVideoId 合成视频的id
     * @param picsInPic 画中画素材数组
     * @param userId 用户id
     * @param merId 商户id
     * @param subtitleAgentRes 字幕agent返回的内容
     * @return 模板成片任务ID
     */
    String videoTemplateAgentApi(Integer id, Integer dpVideoId, List<Map<String, String>> picsInPic, Integer userId, Integer merId, Map<String, Object> subtitleAgentRes, String outputUrl);

    /**
     * 抖音视频拆分并上传OSS，记录历史
     * @param url 原始url
     * @param userId 用户id
     * @param merId 商户id
     * @return oss地址
     */
    Map<String, Object> douyinVideoSplitByUrl(String url, Integer userId, Integer merId, String type);

    /**
     * 通过素材ID复制视频到新OSS位置并记录历史
     * @param materialId 素材ID
     * @param userId 用户ID
     * @param merId 商户ID
     * @return 新OSS地址
     */
    Map<String, Object> VideoSplitByMaterial(Integer materialId, Integer userId, Integer merId, String type);

    /**
     * 通用视频拆解入口
     * @param type 类型 url/material
     * @param url 视频url
     * @param materialId 素材ID
     * @param userId 用户ID
     * @param merId 商户ID
     * @return 拆解后视频的原始url
     */
    String VideoSplit(String type, String url, Integer materialId, Integer userId, Integer merId);

    /**
     * 通用视频转文案入口
     * @param type 类型 url/material
     * @param url 视频url
     * @param materialId 素材ID
     * @param userId 用户ID
     * @param merId 商户ID
     * @return 拆解后视频的原始url
     */
    String VideoSubtitle(String type, String url, Integer materialId, Integer userId, Integer merId);


    /**
     * 最终生成模板视频入口
     * @param videoTemplateRequest 视频模板请求
     * @param userId 用户ID
     * @param merId 商户ID
     */
    VideoTemplateFinal videoTemplateCommon(VideoTemplateRequest videoTemplateRequest, Integer userId, Integer merId);

    /**
     * 模板视频预览
     * @param videoTemplateRequest 视频模板请求
     * @param userId 用户ID
     * @param merId 商户ID
     */
    Map<String, Object> videoTemplatePreview(VideoTemplateRequest videoTemplateRequest, Integer userId, Integer merId);

    /**
     * 新建文件夹
     * @param vo 请求参数，name,parentId,name
     */
    boolean createFolder(CreateFolderVo vo);

    /**
     * 文件/文件夹重命名
     * @param vo 请求参数，name,parentId,name
     */
    boolean renameFile(CreateFolderVo vo);

    /**
     * 移动文件/文件夹
     * @param vo 请求参数，name,parentId,name
     */
    boolean moveFolder(CreateFolderVo vo) ;

    /**
     * 批量移动文件夹/文件
     * @param vo 请求参数，name,parentId,name
     */
    boolean batchMoveFolder(CreateFolderVo vo);

    /**
     * 批量删除
     * @param ids 数组形式的id
     */
    boolean batchDelVideo(List<Integer> ids);

    /**
     * 推送ws事件
     * @param id
     * @param userId
     * @param status
     * @param eventName
     */
    void pushWsEvent(Integer id, Integer userId, Integer status, String eventName);

    /**
     * 热榜列表
     * @param source
     */
    List<Map<String, String>> getHostList(String source);

    /**
     *
     * @param replacePicRequest
     * @return
     */
    Boolean replacePic(ReplacePicRequest replacePicRequest);

    /**
     * 调用agent的格式化输出
     * @param content
     * @param outputFormat
     * @return
     */
    Map<String , Object> agenticAgentApi(String content, Map<String, Object> outputFormat, List<String> instructions, String agent_id, Map<String, Object> agentUserInfo);

    /**
     * AI生成标题
     * @param content
     * @return
     */
    Map<String , Object> videoTitle(String content);

    /**
     * 模板成片编辑功能
     * @param videoTemplateRequest
     * @param userId
     * @param merId
     */
    void videoTemplateEdit(VideoTemplateRequest videoTemplateRequest, Integer userId, Integer merId);

    /**
     * 调用结构化输出 返回字幕和图片关键词
     * @param content
     * @return
     */
    Map<String , Object> videoSubtitleAgentApiNew(String content);

}
